class Watcher {
  constructor(vm, key, cb) {
    this.vm = vm ;
    this.key = key ; //data中的属性名称

    this.cb = cb ; //回调函数，负责更新视图
    // 把watcher对象记录到Dep类的静态属性target
    Dep.target = this ;
    //触发get方法，在get方法中调用addSub
    this.oldValue = this.vm[key]

    Dep.target = null //防止重复添加
  }

  //当数据发生变化的时候更新视图
  update() {
    let newValue = this.vm[this.key] ;
    if(newValue === this.oldValue){
      return 
    }
    this.cb(newValue);
  }
}